#pragma once
//GLEW
#include <GL/glew.h>

//SDL Headers
#include <SDL.h>
#include <SDL_opengl.h>
#include <SDL_ttf.h>

//DevIL
#include <IL/il.h>
#include <IL/ilu.h>

//#include <GL/freeglut.h>
#include <GL/GL.h>
#include <GL/GLU.h>

#include <iostream>
using namespace std;

//Color defines
#define RED FOREGROUND_RED
#define GREEN FOREGROUND_GREEN
#define BLUE FOREGROUND_BLUE
#define BLACK 0x0
#define INTENSE FOREGROUND_INTENSITY
#define IRED RED | INTENSE
#define IBLUE BLUE | INTENSE
#define IGREEN GREEN | INTENSE
#define WHITE RED | GREEN | BLUE
#define IWHITE WHITE | INTENSE

//String value
#define STR_SEPERATOR "--------------------------------------"
#define Print(x) cout << x << endl;
#define CPrint(c, x) SetConsoleColor(c); x; cout << endl; SetConsoleColor();

#define LineSeperator() CPrint(IWHITE, cout << STR_SEPERATOR << endl)
#define Error(x) CPrint(IRED, cout << "ERROR\t";x;cout << "\n[" << __FILE__ << "@" << __LINE__ << "]")
#define Path(x) CPrint(IGREEN, cout << "[" << x << "]")
#define RError(x) CPrint(IRED | GREEN, cout << "RENDER\t"; x)
#define ShaderError(x) CPrint(IRED | BLUE, cout << "SHADER\t"; x)
#define Newline() cout << endl;

#ifndef NULL
	#define NULL 0
#endif
#define Delete(x) if(x != NULL){delete x; x = NULL;}
#define ADelete(x) if(x != NULL){delete[] x; x = NULL;}

void SetConsoleColor(unsigned int foreground = WHITE, unsigned int background = BLACK);